###[model/Student.py]
class Student:
    def __init__(self, stu_id, name, gender=""):
        self.stu_id = stu_id
        self.name = name
        self.gender = gender
        self.seat_position = ""  # 座位号格式如"3A"
        self.date_records = {}   # date_records

    def to_dict(self):
        """序列化方法"""
        return {
            "stu_id": self.stu_id,
            "name": self.name,
            "gender": self.gender,
            "seat_position": self.seat_position,
            "date_records": self.date_records
        }

    @classmethod
    def from_dict(cls, data):
        """反序列化方法"""
        student = cls(
            stu_id=data["stu_id"],
            name=data["name"],
            gender=data.get("gender", "")
        )
        student.seat_position = data.get("seat_position", "")
        student.date_records = data.get("date_records", {})
        return student

    def update_behavior_record(self, date_str, date_record):
        """
        更新指定日期的行为记录
        :param date_str: 日期字符串(yyyyMMdd格式)
        :param date_record: 单日记录字典(如{"seat":"3A","behavior":{{"回答问题":3},{"上课睡觉":2}}})
        """
        if date_str not in self.date_records:
            self.date_records[date_str] = date_record
        else:  # 仅当传入新行为数据时更新
            if "behavior" in date_record:
                self.date_records[date_str]["behavior"] = date_record["behavior"]

    def update_seat(self, new_position: str, date_str: str = None):
        """更新座位并同步到日期记录
        :param new_position: 新座位号/状态（如"3A"/"请假"/"缺勤"）
        :param date_str: 日期字符串(yyyyMMdd格式)，若为None则不更新记录
        :return: 是否需要刷新UI
        """
        if self.seat_position != new_position:
            self.seat_position = new_position
            
            # 同步更新到当前日期的记录
            if date_str:
                if date_str not in self.date_records:
                    self.date_records[date_str] = {"seat": new_position}
                else:
                    self.date_records[date_str]["seat"] = new_position
                    
            return True  # 需要刷新
        return False  # 无需刷新
